Systems and methods for programming motion control

ABSTRACT

Systems, methods and computer program code for the programming of motion control in load transportation systems are provided which may include programming motion control by specifying desired load motions.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application claims benefit and priority under 35 U.S.C. § 119(e) tocommonly-owned U.S. Provisional Patent Application Ser. No. 60/520,515entitled “A System for Programming Motion Control by Specifying LoadMotions”, filed in the name of Wynblatt et al. on Nov. 14, 2003, thecontents of which are hereby incorporated by reference in their entiretyfor all purposes.

BACKGROUND

The present disclosure relates generally to the programming of motioncontrol and, more particularly, to programming motion control byspecifying desired load motions. Load transportation systems such asthose used in warehouses, package distribution plants, assembly plants,and manufacturing plants are often utilized to move loads from onelocation to another. These loads are often moved using load motionactuators such as conveyor belts, rollers, robotic arms, or pin-hole airjets. Current load transportation systems typically must be programmedto cause a load to undertake a desired behavior.

Referring to the load transportation system 100 in FIG. 1 a, forexample, a load 102 may be moveable by load actuators 104 a-b. As shownin FIG. 1 a, the load actuators 104 a-b may include a left conveyor belt104 a and a right conveyor belt 104 b. If the load 102 must be rotated(e.g., as indicated by the rotational arrow 106), the speeds anddirections (e.g., represented by the motion vectors 108 a-b) of theconveyor belts 104 a-b must typically be directly specified. Forexample, the left conveyor belt 104 a may be programmed to move inaccordance with a reverse motion vector 108 a, while the right conveyorbelt 104 b may be programmed to move in accordance with a forward motionvector 108 b. The speeds of the conveyor belts 104 a-b may be specified,for example, to control the rate at which the load 102 is rotated.Similarly, the timing of actuator commands may need to be specified inorder to cause the load 102 to undergo a desired behavior or set ofbehaviors (e.g., rotate ninety degrees, then stop). The systemprogrammer must therefore determine and code each speed, direction, andall timing information for each actuator 104 a-b needed to rotate theload 102.

Similarly, with reference to the system 150 of FIG. 1 b, load A 152 aand load B 152 b may be moveable by an actuator 154 a that moves allloads rigidly, as well as actuators 154 b-c which move only loads thatsit on top of the them. The system 150 may be, for example, a crossbeltconveyor system. If loads A 152 a and B 152 b must be moved from firstlocations (locations A and B, respectively) to second locations(locations A′ and B′, respectively), a programmer would have to specifythe speeds and directions of the actuators 154 a-c, including the timesat which each of the specified motion vectors must be initiated and/orstopped.

These speed, direction, and timing decisions require the programmer tobe highly skilled in selecting settings for all of the various actuatorsin a given load transportation system, and require many programminghours to configure the system to properly transport a given load. Wheremultiple loads are transported by the same system, the required speeds,directions, and timing of the actuators become increasingly complex forthe programmer to determine, and require substantially more programminghours to configure.

Accordingly, there is a need for systems and methods for programmingmotion control that address these and other problems found in existingtechnologies.

SUMMARY

Methods, systems, and computer program code are therefore presented forprogramming motion control in load transportation systems.

According to some embodiments, systems, methods, and computer code areoperable to receive a command associated with a desired behavior of oneor more loads, select a control signal for application to one or moreload actuators, the control signal selected to cause the one or moreloads to undertake the desired behavior, and apply the control signal tothe one or more load actuators.

According to some embodiments, systems, methods, and computer code areoperable to determine a desired velocity of one or more loads, convertthe desired velocity to an obtainable velocity, determine a velocityprofile to be associated with the one or more loads, and modify theobtainable velocity to substantially conform to the velocity profile.

With these and other advantages and features of embodiments that willbecome hereinafter apparent, embodiments may be more clearly understoodby reference to the following detailed description, the appended claimsand the drawings attached herein.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 a is a block diagram of a system for transporting loads;

FIG. 1 b is a block diagram of a system for transporting loads;

FIG. 2 is a flowchart of a method according to some embodiments;

FIG. 3 is a block diagram of a system according to some embodiments;

FIG. 4 is a flowchart of a method according to some embodiments;

FIG. 5 is a block diagram of a system according to some embodiments; and

FIG. 6 is a block diagram of a system according to some embodiments.

DETAILED DESCRIPTION

Some embodiments described herein are associated with an “actuator”,“load actuator”, or “load motion actuator”. As used herein, the terms“actuator”, “load actuator”, and “load motion actuator” may be usedinterchangeably and may generally refer to any devices and/or systemscapable of causing, directing, controlling, and/or otherwisecontributing to the movement of an object. Examples of load motionactuators may include, but are not limited to, rollers, conveyor belts,pin-hole air jets, motors, servos, cables, valves, magnets, and variousrobotic devices such as arms, gates, cranes, and hydraulic lifts. Insome embodiments, an actuator may be or include an electronic device orcomponent such as a processor, a Printed Circuit Board (PCB), and/or anyother type of electrical connection and/or circuit associated with themovement of an object.

Some embodiments described herein are associated with a “controlsignal”. As used herein, the term “control signal” may generally referto any data, bit, packet, pulse, tone, waveform, and/or other type orconfiguration of signal. Control signals may be or include informationpackets transmitted, for example, in accordance with Power-Line Control(PLC), field bus, or industrial Ethernet transmission standards. In someembodiments, a control signal may be or include a command and/or otherinformation associated with a desired setting, action, and/or behaviorof one or more load actuators. The control signal may cause, forexample, an actuator to move a load in accordance with a desired loadbehavior.

Referring to FIG. 2 (and with continuing reference to FIG. 1 a and FIG.1 b), a flow diagram of a method 200 for programming motion control inaccordance with some embodiments is shown. The method 200 may beassociated with and/or performed by, for example, the systems 100, 150,300, and/or 600 (or one or more of the system components) described inconjunction with FIG. 1 a, FIG. 1 b, FIG. 3, and FIG. 6, respectfullyherein. The flow diagrams described herein do not necessarily imply afixed order to the actions, and embodiments may be performed in anyorder that is practicable. Note that any of the methods described hereinmay be performed by hardware, software (including microcode), firmware,or any combination thereof. For example, a storage medium may storethereon instructions that when executed by a machine result inperformance according to any of the embodiments described herein.

In some embodiments (such as shown in FIG. 2), the method 200 may beginby receiving a command associated with a desired behavior of a load, at202. For example, a programmer and/or other entity may enter informationindicative of a desired load motion into a computer, Graphical UserInterface (GUI), and/or any other type or configuration of interfacedevice. The interface may be, for example, an Application ProgrammingInterface (API) used to facilitate and/or standardize the programming ofmotion control. In some embodiments, a programmer may enter informationassociated with a desired rotation 106 of a load 102 (as shown in FIG. 1a). For example, the programmer may use a programming interface toindicate that the load should be rotated ninety degrees clockwise.Similarly, the programmer may also or alternatively specify that load A152 a and load B 152 b are to be moved from positions A and B,respectively, to positions A′ and B′, respectively (as shown in FIG. 1b). In some embodiments, a programmer or other user may issue a commandrelating to both the translational (e.g., movement of loads A 152 a andB 152 b to positions A′ and B′) and rotational (e.g., desired rotation106) movement of loads. According to some embodiments, commandsassociated with desired behaviors of multiple loads and/or collectionsof loads may be received.

For example, a programmer and/or other user may utilize an API tomanipulate and/or manage multiple loads. In some embodiments, one ormore loads may be associated, for example, by grouping them into virtualcollections (e.g., electronically indicating that the loads areassociated). Similarly, multiple loads may be partitioned into one ormore groups and/or categories (e.g., loads that are located in the samegeometric area and/or loads that are of similar types may beassociated). Other API functions may, according to some embodiments,also or alternatively be available to the programmer and/or user. Forexample, the programmer and/or user may submit a query to determinevarious characteristics associated with one or more loads. In someembodiments, the programmer may, for example, determine and/or request apredicted future position of one or more loads. The programmer may,according to some embodiments, determine the nearest neighboring load ofone or more selected loads, collections, and/or groups. In someembodiments, the programmer may, for example, determine the distancebetween two or more loads (e.g., to determine a likelihood of collision,to try and keep similar loads together, etc.).

In some embodiments, the command may be received from a computer, acomputer program, a software module, and/or any other type orconfiguration of code, device, and/or object. For example, the commandmay be received from and/or by a computer server, a computerworkstation, or a Personal Computer (PC) connected to a network. Thenetwork may be, according to some embodiments, any known or availablewired or wireless communication network including, but not limited to, aLocal-Area Network (LAN), a Wide-Area Network (WAN), a PLC network orfield bus network, the Internet, and/or an intranet or extranet. In someembodiments, the command may be received by a processor, an actuator(such as actuators 104 a-b, 154 a-c), and/or any other network-enabledand/or communication-enabled device. For example, a computer and/or loadtransportation system programmer may utilize a computer workstation tosend a command to a software package and/or API for programming motioncontrol. In some embodiments, the command may be sent, transmitted,and/or received by and/or within a single device, system, and/or object.

The method 200 may continue, for example, at 204 where a control signalfor application to a load actuator may be selected. The control signalmay be selected, according to some embodiments, to cause a load toundertake the desired behavior associated with the received command. Forexample, where the programmer specifies, requests, commands, and/orotherwise indicates that the load is to be rotated ninety degreesclockwise, one or more control signals operable to cause the load tomove in such a manner may be selected and/or otherwise determined. Insome embodiments, the control signal may be selected based only in parton the received command. For example, other factors, commands, metrics,parameters, and/or other information may be utilized in selecting acontrol signal.

In some embodiments, the control signal may be automatically determined,selected, and/or created. With reference to FIG. 1 a, for example, themotion vectors 108 a-b and/or the timing of actuator movements may beautomatically determined. The motion and timing parameters may then, forexample, be automatically converted to and/or encoded in an appropriatecontrol signal. In some embodiments, a computer, processor, and/orsoftware package may determine speeds, directions, and/or timingrequired to make the load undergo the desired behavior (e.g., asindicated by the received command). In such a manner, for example, theprogrammer need not directly specify, code, and/or determine thenecessary speed, direction, and/or timing parameters. The amount of timethe programmer must spend developing custom logic for any given loadtransportation system may accordingly be significantly reduced.

In some embodiments, the required speeds, directions, and/or timing maybe embedded in, converted to, and/or otherwise may be associated withone or more specific control signals. For example, an electronic signalcapable of causing an actuator to perform in accordance with therequired parameters may be created, selected, identified, and/orotherwise determined. In some embodiments, one or more appropriatecontrol signals may be retrieved from a database or lookup table ofknown or available control signals. The control signal may be any typeor configuration of signal, transmission, and/or communication that isor becomes known or available and/or is described herein. In someembodiments, the control signal may be encoded, encrypted, and/orcompressed.

In some embodiments, such as where a programmer specifies that loads A152 a and B 152 b are to be moved from locations A and B to locations A′and B′ (as shown in FIG. 1 b), there may be many methods that the loadsmay be appropriately transported to the desired locations. While eachmethod may achieve the desired result, each method may require differentspeed, direction, and timing settings for the different actuators 154a-c. In some embodiments, the programmer may only need to specify thatthe loads 152 a-b need to be moved to locations A′ and B′. Theparticular method and corresponding actuator settings required toachieve the desired results may be automatically determined. In someembodiments, a method may be automatically chosen from a plurality ofavailable methods, strategies, and/or routes. For example, a programmermay command that load A 152 a be moved to position A′, as describedabove. Of the many possible methods available to move the load toposition A′, the most desirable route may be automatically chosen. Thevarious actuator settings required to implement the chosen method mayalso be determined automatically. In some embodiments, a control signalmay then be created, selected, and/or otherwise determined thatrepresents, is indicative of, and/or includes the automaticallydetermined actuator settings.

According to some embodiments, at 206, the control signal may be appliedto the load motion actuator. For example, the control signal selected at204 may be sent to the actuator. In some embodiments, the control signalmay cause the actuator to move and/or assist in moving the load inaccordance with the desired behavior. In some embodiments, the controlsignal may be applied to the actuator through the use of one or moreconverters, filters, and/or controllers. For example, the control signalmay be a digital signal sent to an Analog-to-Digital Converter (ADC).The ADC may then, for example, convert the digital control signal to oneor more analog commands and/or settings recognized by the actuator.

In some embodiments, the control signal may be applied to the actuatorvia multiple component and/or composite signals. For example, where thecontrol signal is directed to moving load B 152 b from location B tolocation B′ (as shown in FIG. 1 b), an initial signal may be selectedand/or transmitted, for example, causing the first actuator 154 a tomove load B 152 b to the second actuator 154 c. Once load B 152 b ispositioned on or partially on the second actuator 154 c, a second signalmay be transmitted causing the second actuator 154 c to move load B 152b to the desired destination B′. The selection and/or transmittal ofactuator-specific signals may continue, for example, until load B 152 breaches another and/or final destination (not shown). In someembodiments, the various control signals and/or signal components may beapplied to an actuator prior to the load arriving at the actuator. Insome embodiments, the actuator (such as actuator 154 c) may becontrolled as a load nears the actuator. In some embodiments, thevarious components of the selected control signal (and/or variousselected control signals) may be applied directly to one or moreactuators as required to appropriately move the load.

Turning now to FIG. 3, a block diagram of a system 300 for programmingmotion control according to some embodiments is shown. The system may beassociated with and/or carry out, for example, methods 200 and/or 400 asdescribed herein. The system 300 may include a programming device 302, aload programming library 304, a sensor interface 306, sensors 308, amotion control programming library 310, and actuators 312. In someembodiments, the actuators 312 may be, include, and/or be similar to theactuators 104 a-b, 154 a-c described in conjunction with FIG. 1 a andFIG. 1 b herein. Fewer or more components than shown in FIG. 3, anddifferent types, layouts, quantities, and configurations of systems maybe used without deviating from the scope and/or purpose of someembodiments.

In some embodiments, the programming device 302 may be or include a PC,a computer workstation, a computer server, a GUI, an API, and/or anyother device that is or becomes known or available. For example, theprogramming device 302 may be a computer workstation and/or console usedby a load motion programmer or load transportation system operator. Insome embodiments, the programming device 302 may be or include a motioncontrol programming environment such as Microsoft® Visual Studio® orSiemens™ Simatic™ STEP7, for example. The programming device 302 may beused, according to some embodiments, to allow a programmer to specifymotion control commands. The programming device 302 may interface with,be connected to, include, and/or otherwise be in communication with theload programming library 304.

In some embodiments, the load programming library 304 may be or includea software package or program installed, for example, on a computerserver and/or on or within the programming device 302. The loadprogramming library 304 may, according to some embodiments, carry out,effectuate, and/or otherwise be associated with methods 200 and/or 400as described herein. For example, the load programming library 304 mayconvert a programmer's load motion command into actuator commands. Theactuator commands may, for example, be operable to move a load inaccordance with the specified load motion command. In some embodiments,the load programming library 304 may include and/or provide access to anAPI for programming load motion (not shown).

In some embodiments, the load programming library 304 may include a loadmotion store 320. The load motion store 320 may be any type and/orconfiguration of storage device that is or becomes known or available.For example, the load motion store 320 may be or include one or moredatabases, tables, files, and/or memory devices for storing information.In some embodiments, the load motion store 320 may include storage forproposed load behaviors 322 and/or current load behaviors 324. Theproposed load behaviors 322 may include, for example, desired loadmotions specified by a load motion programmer. In some embodiments, theproposed load behaviors 322 may be or include and/or otherwise beassociated with a command received from and/or through the programmingdevice 302.

The current load behaviors 324 may be or include information associatedwith the current position, behavior, and/or relating to a characteristicof a load. In some embodiments for example, current informationregarding a load may be obtained from the sensor interface 306 and/orthe sensors 308. The load motion store 320 may, according to someembodiments, also or alternatively store information associated withfuture and/or predicted positions, characteristics, and/or qualitiesrelated to one or more loads. In some embodiments, the load motion store320 and/or the load programming library 304 may also or alternativelystore other information associated with a load transportation system,such as the size and/or boundaries of the system and default or normalpaths and/or plans for moving loads. In some embodiments, a programmermay utilize the programming device 302, for example, to query theinformation contained within the load information store 320. Forexample, the programmer may enter a query command such as “GetVelocity”,which may for example, request the current load behavior 324 (e.g., thevelocity) of a particular load.

The load programming library 304 may, according to some embodiments,include an actuator information store 330. The actuator informationstore 330 may, for example, contain information associated with eachactuator in a load transportation system. Examples of actuatorinformation may include, but are not limited to, the numbers, sizes,characteristics, and/or positions of actuator areas of influence,default values for actuator settings, and speed and/or directionalcapabilities of actuators. In some embodiments, the information storedwithin the actuator information store 330 may be used by the loadprogramming library 304 to convert desired load motions into appropriateactuator commands.

In some embodiments, the actuator information store 330 may include ahistory buffer 332 and/or may store information associated with currentactuator behaviors 334. The history buffer 332 may store, for example,information associated with the past positions, behaviors, and/orcharacteristics relating to actuators. The current actuator behaviors334 may be or include the present, future and/or predicted actuatorcommands and/or settings. In some embodiments, the actuator informationstore 330 and/or the load programming library 304 may also oralternatively store other information associated with a loadtransportation system, such as the size and/or boundaries of the systemand default or normal paths and/or plans for moving loads.

The sensor interface 306 may generally be any device and/or componentfor communicating with sensors that is or becomes known or available. Insome embodiments for example, the sensor interface 306 may be or includea computer and/or computer processor, a network processor, a NetworkInterface Card (NIC), and/or a converter, filter, or other logic and/orcomputational device. The sensors 308 may be any devices and/orcomponents that are operable to gather, sense, and/or otherwisedetermine information associated with loads and/or load movements orbehaviors. The sensors 308 may include, for example, motion sensors,weight sensors, light sensors (including lasers), thermal sensors,acoustic sensors, triggers, gates, switches, and/or barcode or otherelectronic readers and/or scanners.

In some embodiments, the motion control programming library 310 may beor include a system or device capable of managing, creating, issuing,sending, and/or receiving actuator commands. The motion controlprogramming library 310 may include, according to some embodiments, anAPI (not shown) for defining, programming, and/or managing motioncontrol functions or commands. The motion control programming library310 may be or include, for example, a Siemens™ SIMOTION® motion controlsystem. In some embodiments, the API provided by the motion controlprogramming library 310 may be operated in accordance with the IEC-61131standards published by the International Electrotechnical Commission(IEC) and/or as defined by PLCopen. The motion control programminglibrary 310 may, according to some embodiments, implement or applyactuator commands to the actuators 312. For example, the motion controlprogramming library 310 may cause the actuators 312 to behave inaccordance with one or more actuator commands determined by the loadprogramming library 304.

As an illustrative example, a programmer may require a load to be movedfrom one location to another (such as from location A to location B, asshown in FIG. 1 b). The programmer may utilize the programming device302, which may be, for example, a computer workstation. The computerworkstation 302 may include an installed software program that includesthe API provided by the load programming library 304. Through the loadprogramming API, the programmer may enter and/or code various commandsrelating to the transportation of the load. For example, the programmermay enter a command such as “SetPosition” to identify the desiredposition of the load (e.g., location B).

The desired load behavior (e.g., movement from location A to location B)may, for example, be stored by the load programming library 304 as aproposed load behavior 322 in the load information store 320. Forexample, the desired behavior may be stored in a proposed load behaviorsection and/or table 322 of a load database 320. In some embodiments,the load programming library 304 may communicate with the sensorinterface 306 (and/or sensors 308) to determine a current status of theload. According to some embodiments, the sensors 308 may provideinformation to the load programming library 304 (e.g., via the sensorinterface 306) on a continuous or intermittent basis.

The current load information may be stored by the load programminglibrary 304 as a current load behavior 324 in the load information store320. In some embodiments, when the proposed load behaviors 322 do notmatch the current load behaviors 324, the load programming library 304may initiate and/or transmit commands to move the load in accordancewith the desired load behaviors 322. In other words, the loadprogramming library 304 may determine that the load needs to move andmay trigger an event and/or initiate a process to move the load asrequired. In some embodiments, the current load behaviors 324 and theproposed load behaviors 322 may not be compared and/or related until aparticular commit command, such as a “Go” command, is received from theprogrammer.

Continuing the illustrative example, once the load programming library304 has determined that the load must be moved, the desired velocity ofthe load may be determined. In some embodiments, the programmer mayenter and/or set the desired velocity. Where a simple “SetPosition”command is entered however, an appropriate velocity for the load mayneed to be determined. The velocity may be determined, for example, inaccordance with the method 400 as described hereinafter. In someembodiments, once the intended velocity of the load is determined and/orset, the desired load behavior (movement direction, velocity, etc.) maybe converted and/or mapped to appropriate actuator commands. An exampleof how the desired load behaviors may be mapped to actuator commands isdescribed in the co-pending U.S. patent application Ser. No. ______,titled “Systems and Methods for Controlling Load Motion Actuators”,concurrently filed in the name of Wynblatt et al. on ______, 2004, thecontents of which are hereby incorporated by reference in their entiretyfor all purposes.

In some embodiments, information from the actuator information store 330may be utilized to determine commands that are directed to operating theactuators 312 in accordance with various limits, capabilities, and/orcharacteristics of the actuators 312. Similarly, stored and/or enteredinformation regarding the load transportation system, such as defaultload paths or speeds, may be utilized to determine and/or modifyactuator commands. For example, the desired load behaviors and/orvelocities determined, processed, and/or received from the loadprogramming library 304 may be converted to one or more actuatorcommands, such as commands defined by the API provided by the motioncontrol programming library 310.

In some embodiments, the commands defined by the motion controlprogramming library 310 (and/or an associated API) may be the commandsthat typically must be determined by a load motion programmer to operatecurrent load transportation systems. According to some embodimentsherein, the load programming library 304 may allow the programmer tosimply enter desired load motions, which the load programming library304 may then, for example, convert to appropriate actuator commandsrecognized and/or defined by the motion control programming library 310.

In some embodiments, the actuator commands determined, defined, and/ormapped from desired load motions may then be applied to the actuators312. For example, the motion control programming library 310 maytransmit the determined actuator commands directly to the actuators 312.In some embodiments, a separate motion control device (not shown) mayreceive actuator commands and/or other signals (such as the controlsignal described in conjunction with method 200 herein). The motioncontrol device may then, for example, cause the actuators 312 to move inaccordance with the determined actuator commands.

Turning now to FIG. 4, a flowchart of a method 400 for programmingmotion control in accordance with some embodiments is shown. The method400 may be performed by and/or associated with, for example, the system300 described in conjunction with FIG. 3 above. In some embodiments, themethod 400 may be carried out by the load programming library 304 ofsystem 300. The method 400 may begin, according to some embodiments, bydetermining a desired velocity of a load, at 402.

For example, a programmer may enter a command, such as “SetVelocity”,specifying a desired velocity for a load. If no specific velocity isspecified by the programmer (such as when the programmer enters a“SetPosition” command), a normal or default plan for moving loads may bedetermined. For example, default load movement information, such aspreferred load paths, may be stored in a database (such as loadinformation store 320) or in a file and/or computer program (such as inor by the load programming library 304). The velocity for the load maythen be determined based on the default movement plan, in accordancewith a default velocity setting, and/or within limits stored regardingsystem and/or actuator capabilities.

In some embodiments, the method 400 may continue at 404, by convertingthe desired load velocity into an obtainable load velocity. For example,various stored and/or entered information regarding the capabilities ofthe system and/or the actuators may be utilized to determine if thedesired velocity is capable of being implemented by the given loadtransportation system. If the desired velocity is obtainable, then nochange to the desired velocity may be necessary, for the desiredvelocity may already be an obtainable velocity. If the desired velocityis not obtainable, the desired velocity may need to be adjusted to anobtainable velocity. In some embodiments, an obtainable velocitysubstantially similar to the desired velocity may be selected and/ordetermined. For example, the desired velocity may be converted to theclosest obtainable velocity (e.g., the obtainable velocity having thesmallest deviation from the desired velocity).

The method 400 may continue, according to some embodiments, at 406, bydetermining a velocity profile to be associated with the load. Forexample, the obtainable velocity may need to be smoothed to avoid undueand/or inappropriate acceleration of the load. Information may be storedand/or entered, for example, regarding the limits within which a loadmay be accelerated, rotated, and/or moved. Fragile and/or eccentricloads may require smooth acceleration to avoid damage and/or tipping,for example. In some embodiments, a velocity profile (i.e., anacceleration plan) may be selected which conforms to the limitsestablished for the load. For example, an expected change in velocity(i.e., acceleration) may be determined by comparing the current velocityof the load (such as may be stored in the current load behaviors 324 ofthe load information store 320) to the obtainable velocity of the load(such as may be stored in the proposed load behaviors 322 of the loadinformation store 320).

At 408, the obtainable velocity may be modified to substantially conformto the determined velocity profile. Where the difference between theobtainable load velocity and the current load velocity exceeds certainvalues, for example, the obtainable load velocity may be modified sothat the load is accelerated within acceptable limits. In someembodiments, the obtainable load velocity may be changed to match themaximum, average, median, and/or minimum velocity that is acceptableaccording to the selected velocity profile. In some embodiments, thechange in load velocity from the current load velocity to the obtainableload velocity may be spread out over an appropriate length of time toachieve the desired acceleration.

In some embodiments, the velocity of the load may be further adjusted.For example, the path of the load (route, velocity, timing, etc.) may beanalyzed to determine if the load is likely to collide with other loads.Proposed paths for various loads may be compared at specific, various,and/or random time intervals, for example, to determine if any loadswill occupy the same location at the same time (i.e., a collision).Information regarding the loads, such as load size and/or shape, may beutilized to assist in determining if loads will collide. In someembodiments, if a collision between two loads is predicted, one or moreof the velocities and/or paths of the two competing loads may be alteredto avoid the collision.

For example, the modified obtainable velocity of the load with thelowest priority may be adjusted to avoid the collision. In someembodiments, the proposed velocities of either or both loads may beiteratively reduced, for example, until no collision appears likely. Themethod 400, and/or any of the velocity determinations, conversions,alterations, and/or modifications therein, may be repeated at varioustime intervals, continuously, and/or after changes are made to avoid apredicted collision. Changes made to avoid a collision may, for example,create the possibility of new collisions which may need to beinvestigated.

Referring now to FIG. 5, a system 500 is shown to illustrate theprogramming of load motion according to some embodiments. The system 500may, for example, implement and/or be associated with methods 200 and/or400 as described above. In some embodiments, the system 500 may includeloads A, B, and C. Load A may be moved to position A′, according to someembodiments, in accordance with a desired motion vector 502. In someembodiments, loads B and C may be moved in accordance with desiredmotion vectors 504 and 506, respectively. The desired motion vectors502, 504, 506 may, according to some embodiments, be specified motionvectors, obtainable motion vectors, modified obtainable motion vectors,and/or other motion vectors associated with the respective loads.

As an illustrative example, a programmer may specify that load A is tobe moved to position A′, load B is to be moved at an heading of fortydegrees at a velocity of one and a half meters per second (vector 504),and load C is to be moved at a heading of zero degrees at one meter persecond (vector 506). The programmer-specified vectors for loads B and Cmay be selected as initial desired vectors 504, 506. Because no vectorwas specified for load A however, a normal or default plan of loadmovement associated with the particular load transportation system maybe determined.

Where system 500 includes a matrix of roller diverter actuators (notshown), for example, movement may only be permitted in the directions ofheadings zero, forty-five, and one hundred and thirty-five degrees.Typical and/or desired movement may therefore, consist of moving a loadat a heading of zero degrees until it is aligned at either a forty-fivedegree or one hundred and thirty-five degree angle with the intendeddestination (e.g., location A′), then by moving in the requisitediagonally-aligned direction to reach the destination. Because thedesired destination location A′ is oriented at a heading of zero degreesfrom the current position of load A, a default path of zero degrees may,for example, be chosen for load A. The velocity of load A may, accordingto some embodiments, be set to a default velocity, such as one meter persecond. In such a manner, the initial desired vector 502 for load A maybe determined.

In some embodiments, the vectors 502, 504, 506 may be compared with thecapabilities of the actuators to determine if the vectors 502, 504, 506are obtainable by system 500. For example, the roller diverter actuatorsmay be capable of achieving velocities between zero and two meters persecond, in one meter per second increments, at headings as describedabove. Because the desired vector 502 for load A was selected based onsystem 500 defaults and/or capabilities, the vector 502 conforms toactuator capabilities (e.g., one meter per second at a heading of zerodegrees is obtainable). The vector 506 for load C is, in thisillustrative example, equivalent to the vector 502 selected for load A,and is therefore also obtainable.

The desired vector 504 for load B however, includes both headings andvelocities that are not obtainable. In other words, the actuators arenot capable of obtaining the fractional velocity of one and a halfmeters per second, and they are not capable of movement at a heading offorty degrees. In some embodiments, the desired vector 504 for load Bmay be converted to an obtainable vector 508. The obtainable vector 508may be, for example, set to both headings and velocities that aresubstantially similar and/or as similar as possible to those originallyspecified by the programmer. For example, the obtainable vector 508 forload B may be set to a velocity of two meters per second (or one meterper second if rounding down is desired) and the heading may be set atforty-five degrees. Any method of rounding, converting, and/or alteringthe desired velocity and heading to obtainable velocities and headingsthat is or becomes known or available may be used.

In some embodiments, the possibility of collision may be investigated.Predicting the locations of loads A, B, and C over time, for example, itmay be determined that loads A and B are likely to collide. In someembodiments, the velocity of load B may be adjusted to avoid thecollision. For example, the conversion of the original desired velocityfor load B into an obtainable velocity for load B may be revisited. Theconversion may be recalculated, for example, to round the originaldesired velocity of load B down instead of up. The resulting obtainablevelocity of one meter per second may therefore be selected. If analysisof predicted future load positions using the new setting shows that thecollision has been avoided by the change, no further changes may berequired. If the collision remains likely however, either or both of theobtainable vectors 502, 508 for loads A and B may be appropriatelyadjusted to avoid the collision. In some embodiments, only imminentcollisions (e.g., collisions likely to occur within one machine cycleand/or within a small amount of time) may be considered. This may, forexample, allow the loads to be transported as similarly to the desiredbehaviors as is possible and/or reduce computation time.

Turning now to FIG. 6, a block diagram of a system 600 for programmingload motion according to some embodiments is depicted for use inexplanation, but not limitation, of described embodiments. Differenttypes, layouts, quantities, and configurations of systems may be usedwithout deviating from the scope or intent of some embodiments. In someembodiments, the system 600 may be or include a computer such as acomputer server, computer workstation, PC, and/or any other type orconfiguration of computational or logic device. The server 600 mayinclude one or more processors 602, which may be any type orconfiguration of processor, microprocessors, and/or micro-engines thatis or becomes known or available. In some embodiments, the server 600may also include one or more communication interfaces 604, an outputdevice 606, an input device 608, and/or a memory device 610, all and/orany of which may be in communication with the processor 602.

The communication interface 604 may be or include any type and/orconfiguration of communication device that is or becomes known oravailable. In some embodiments, the communication device 604 may allowthe system 600 (and/or the processor 602) to communicate with, forexample, a load transportation system such as systems 100, 150, 300and/or with a matrix of actuators such as the matrix 104 a-b, 154 a-cdescribed herein. In some embodiments, the processor 602 may sendsignals to the matrix of actuators and/or any of the various individualactuators. The signal may be, for example, the control signal asdescribed in conjunction with method 200 herein. The output device 606and the input device 608 may be or include one or more conventionaldevices such as displays, printers, keyboards, a mouse, a trackball,etc. The devices 606, 608 may be utilized, for example, by an operatorand/or system user to program a load transportation system in accordancewith embodiments described herein.

The memory device 610 may be or include, according to some embodiments,one or more magnetic storage devices, such as hard disks, one or moreoptical storage devices, and/or solid state storage. The memory device610 may store, for example, applications, programs, procedures, and/ormodules 612, by which the server 600 may allow programming of loadactuators. The load programming library 612, for example, may be aprogram and/or API for facilitating and/or standardizing the programmingof load motion actuators. The load programming library 612 may be or besimilar to, according to some embodiments, the load programming library304 described in conjunction with FIG. 3 herein. For example, the loadprogramming library 612 may permit a programmer to enter desired loadbehaviors to control load motions. The load programming library 612 may,for example, convert desired load behaviors into appropriate actuatorcommands and/or actions for moving loads as desired.

The several embodiments described herein are solely for the purpose ofillustration. Persons skilled in the art will recognize from thisdescription that other embodiments may be practiced with modificationsand alterations limited only by the claims.

1. A method, comprising: receiving a command associated with a desiredbehavior of one or more loads; selecting a control signal forapplication to one or more load actuators, the control signal selectedto cause the one or more loads to undertake the desired behavior; andapplying the control signal to the one or more load actuators.
 2. Themethod of claim 1, further comprising: determining a current behavior ofthe one or more loads.
 3. The method of claim 2, wherein the controlsignal is selected at least in part based on the current behavior of theone or more loads.
 4. The method of claim 2, the determining the currentbehavior of the one or more loads comprises: predicting a futureposition of the one or more loads based on the control signal applied tothe one or more load actuators.
 5. The method of claim 2, thedetermining the current behavior of the one or more loads comprises:determining a nearest neighboring load of the one or more loads.
 6. Themethod of claim 2, the determining the current behavior of the one ormore loads comprises: determining a distance between the one or moreloads and at least one other load.
 7. The method of claim 1, furthercomprising: determining a characteristic of the one or more loads. 8.The method of claim 7, wherein the control signal is selected at leastin part based on the characteristic of the one or more loads.
 9. Themethod of claim 1, wherein selecting the control signal comprises:determining a desired velocity of the one or more loads; and determininga velocity for the one or more load actuators that substantially causesthe one or more loads to achieve the desired velocity.
 10. The method ofclaim 1, wherein selecting the control signal comprises: determining adesired position of the one or more loads; and determining a velocityfor the one or more load actuators that substantially causes the one ormore loads to achieve the desired position.
 11. The method of claim 1,wherein the one or more loads comprise a plurality of loads andselecting the control signal comprises: determining at least one of adesired position and a desired velocity for at least one of theplurality of loads; determining, for each other load of the plurality ofloads, at least one of a desired position and a desired velocity,wherein the at least one of a desired position and a desired velocity ofeach load is relative to another load in the plurality of loads; anddetermining a velocity for the one or more load actuators thatsubstantially causes each load in the plurality of loads to achieve theat least one of the desired position and the desired velocity.
 12. Themethod of claim 1, wherein the one or more loads comprise a plurality ofloads and selecting the control signal comprises: grouping at least twoof the plurality of loads into one or more virtual collections;determining at least one of a desired position and a desired velocityfor the at least two loads in the one or more virtual collections; anddetermining a velocity for the one or more load actuators thatsubstantially causes the at least two loads in the one or more virtualcollections to achieve the at least one of the desired position and thedesired velocity.
 13. The method of claim 12, wherein the groupingcomprises: partitioning the loads in the plurality of loads into groupsbased at least in part on the geometric positions of the loads.
 14. Themethod of claim 13, wherein the partitioning comprises: selecting a loadin the plurality of loads having the most extreme geometric position.15. The method of claim 1, wherein the control signal is selected basedat least in part on information regarding the capabilities of the one ormore load actuators.
 16. The method of claim 1, wherein the one or moreload actuators includes a matrix of load actuators.
 17. A method,comprising: determining a desired velocity of one or more loads;converting the desired velocity to an obtainable velocity; determining avelocity profile to be associated with the one or more loads; andmodifying the obtainable velocity to substantially conform to thevelocity profile.
 18. The method of claim 17, further comprising:determining if the one or more loads will collide with at least oneother load if the one or more loads are moved using at least one of thedesired velocity, the obtainable velocity, and the modified obtainablevelocity.
 19. The method of claim 18, further comprising: selecting thevelocity of the one or more loads to be at least one of the desiredvelocity, the obtainable velocity, the modified obtainable velocity, andan alternate velocity, to avoid a collision between the one or moreloads and at least one other load.
 20. The method of claim 17, whereinthe desired velocity of the one or more loads is selected based at leastin part by a desired behavior of the one or more loads.
 21. The methodof claim 17, wherein the converting is based at least in part on thecapabilities of at least one load actuator.
 22. The method of claim 17,wherein the velocity profile defines a plurality of velocities for theone or more loads over a period of time.
 23. The method of claim 22,wherein the plurality of velocities for the one or more loads areselected to achieve substantially even acceleration of the one or moreloads.
 24. A system, comprising: a processor; and a hard disk drivehaving stored therein instructions that when executed by a machineresult in the following: receiving a command associated with a desiredbehavior of one or more loads; selecting a control signal for one ormore load actuators, the control signal selected to cause the one ormore loads to undertake the desired behavior; and applying the controlsignal to the one or more load actuators.
 25. An article of manufacture,comprising: a storage medium having stored thereon programming code,comprising: code to receive a command associated with a desired behaviorof one or more loads; code to select a control signal for one or moreload actuators, the control signal selected to cause the one or moreloads to undertake the desired behavior; and code to apply the controlsignal to the one or more load actuators.
 26. A system, comprising: aplurality of load actuators for moving one or more loads; an interfacefor receiving commands associated with a desired behavior of the one ormore loads; and a processor operable to: select a control signal for atleast one of the plurality of load actuators, the control signalselected to cause the one or more loads to substantially undertake thedesired behavior; and apply the control signal to the load actuator. 27.The system of claim 26, further comprising: a sensor for determininginformation associated with the current behavior of the one or moreloads; and a sensor interface for receiving the information from thesensor.
 28. The system of claim 27, wherein the control signal isselected at least in part based on the information.
 29. The system ofclaim 26, further comprising: program code operable to be executed bythe processor to select the control signal and apply the control signalto at least one of the plurality of actuators.
 30. The system of claim29, wherein the program code includes: code to determine a desiredvelocity of the one or more loads; code to convert the desired velocityof the one or more loads to an obtainable velocity; and code to modifythe obtainable velocity to substantially conform to a velocity profile.31. The system of claim 30, further comprising: code to determine if theone or more loads will collide with at least one other load.